import { ref } from 'vue'
import { regionApi } from '@/api/system/region'

// 全局共享的数据状态
const globalData = ref<any[]>([])
const globalLoading = ref(false)
const globalError = ref<string | null>(null)
let loadPromise: Promise<any> | null = null

// 转换数据格式以适配el-cascader组件
const convertToCascaderFormat = (data: any[]): any[] => {
  if (!Array.isArray(data)) {
    console.error('数据不是数组格式:', data)
    return []
  }

  return data
    .map(item => {
      if (!item || typeof item !== 'object') {
        console.error('数据项格式不正确:', item)
        return null
      }

      const result: any = {
        id: item.id, // 使用id作为id，与cascaderProps配置一致
        name: item.name,
        children: [],
      }

      // 保留原始数据中的其他属性，包括adcode作为备用
      Object.keys(item).forEach(key => {
        if (key !== 'id' && key !== 'name' && key !== 'children') {
          result[key] = item[key]
        }
      })

      // 处理子节点
      if (item.children && Array.isArray(item.children) && item.children.length > 0) {
        result.children = convertToCascaderFormat(item.children)
      }

      return result
    })
    .filter(item => item !== null)
}

// 加载级联数据
const loadCascaderData = async (): Promise<any[]> => {
  // 如果已有数据，直接返回
  if (globalData.value.length > 0) {
    // 使用缓存数据
    return globalData.value
  }

  // 如果正在加载中，等待加载完成
  if (loadPromise) {
    // 等待数据加载完成
    return loadPromise
  }

  // 开始加载
  globalLoading.value = true
  globalError.value = null

  loadPromise = regionApi.getTree()

  try {
    const response = await loadPromise
    // 级联数据响应结构分析
    // response类型检查
    // null值检查
    // response.data结构分析
    // response.data类型检查
    // 数组类型验证

    // 检查响应结构
    if (response && response.data && Array.isArray(response.data)) {
      // 原始数据统计

      try {
        // 转换数据格式以适配el-cascader组件
        const convertedData = convertToCascaderFormat(response.data)
        // 数据转换成功统计

        globalData.value = convertedData
        return convertedData
      } catch (convertError) {
        console.error('数据转换失败:', convertError)
        globalError.value = '数据转换失败'
        return []
      }
    } else {
      console.error('响应数据结构不正确:', response)
      // response存在检查
      // response.data存在验证
      // 数组格式确认
      globalError.value = '响应数据结构不正确'
      return []
    }
  } catch (error) {
    console.error('加载级联数据失败:', error)
    globalError.value = '加载数据失败'
    return []
  } finally {
    globalLoading.value = false
    loadPromise = null
  }
}

// 清除缓存
const clearCache = () => {
  globalData.value = []
  globalError.value = null
  loadPromise = null
}

export { globalData, globalLoading, globalError, loadCascaderData, clearCache }
